"""
@name : recv_data
@author : zhangjian
@projectname: tlbb

#接口限制：
一个小时只有100次多请求——》控制请求频率——》请求一下sleep一下
一次性得到的结果不能超过1万条
请求接口——》异常处理，重试3次，间隔2秒再去重试
如果请求过就不需要再请求了
"""
import requests
import config
import country
import os
import time

#检查文件夹是否存在，不存在就创建
def dir_check(dir_path):
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)

#通过接口请求获取相应的信息，然后保存在当前data目录下
def download(full_url,file_path):
    for i in range(3):
        try:
            result = requests.get(full_url)
            if result.status_code == 200 :
                with open(file_path,'w+',encoding='utf-8') as fp:
                    print(result.text)
                    fp.write(result.text)
                    break;
        except:
            print(f'第{i+1}次请求失败')
        time.sleep(2)

if __name__ == "__main__":
    #判断数据目录存不存在，不存在就创建一个
    dir_path="data/"+config.Products
    dir_check(dir_path)
    for year in range(int(config.Start_Year),int(config.End_Year)+1):
        #创建年份路径
        year_path=dir_path + "/" + str(year)
        dir_check(year_path)
        for state in country.country[1:]:
            print(f"正在下载{year}年，{state.get('text')}国家的数据")
            state_id = state['id']
            #生成请求格式 url = "https://comtrade.un.org/api/get/plus?max=10000&type=C&freq=A&px=HS&ps=2020&r=156&p=all&rg=all&cc=1006&fmt=csv"参数的顺序可以变
            full_url=config.URL + '&ps=' + str(year) + "&r=" + state_id + \
                "&cc=" + str(config.Products_id)
            #生成保存数据的文件路径
            file_path = year_path + '/' + state.get('text') + '.csv'
            #如果之前已经请求过，就跳过本次请求
            if os.path.exists(file_path):
                print('文件已存在，不需要重新请求')
            else:
                #去爬取数据，睡36秒,避免100次/h访问限制
                download(full_url,file_path)
                time.sleep(36)
